﻿Imports Persistencia
Public Class ctrTipoServico
    Inherits ControlePadrao.ctrPadrao

#Region "Variáveis"
    Private objTipoServico As New perTipoServico

    Public Mensagens As String() = {"Tipo de serviço já cadastrado.",
                                    "Origem do serviço obrigatória.",
                                    "Descrição do tipo de endereço obrigatória."}

    Public sCamposDemonstracao As String() = {"Identificador", "Tipo de Serviço", "Origem"}
    Public sCamposTabela As String() = {"codTipoServico", "descTipoServico", "Origem"}
    Public sCamposChave As String() = {"codTipoServico", "descTipoServico", "Origem"}
    Public sTitulosColunas As String() = {"Identificador", "Tipo de Serviço", "Origem"}

    Public sCamposDemonstracaoContrato As String() = {"Serviço", "Origem", "Valor"}
    Public sCamposTabelaContrato As String() = {"codServico", "descTipoServico", "origem", "valor"}
    Public sCamposChaveContrato As String() = {"codServico", "descTipoServico", "origem", "valor"}
    Public sTitulosColunasContrato As String() = {"Serviço", "Origem", "Valor"}

#End Region

#Region "Enumerações"

    Public Enum OrigemServico
        TRANSPORTE_VALORES = 1
        TESOURARIA = 2
        MONITORAMENTO = 4
        ADMINISTRATIVO = 10
    End Enum

    Public Enum eColsServicoContrato
        DESC_SERVICO = 0
        ORIGEM = 1
        VALOR = 2
        ID_SERVICO = 3
        ID_CONTRATO = 4
    End Enum

#End Region

#Region "Propriedades"

    Public Property CodTipoServico As Int32

#End Region

#Region "Enumerações"

    Public Enum eMensagens
        JA_CADASTRADO = 0
        ORIGEM_OBRIGATORIA = 1
        DESCRICAO_OBRIGATORIA = 2
    End Enum

#End Region

#Region "Métodos"

    Public Function retornaDtbServicos() As DataTable
        Dim dtbServico As New DataTable

        With dtbServico
            .Columns.Add("descTipoServico", GetType(String))
            .Columns.Add("origem", GetType(String))
            .Columns.Add("valor", GetType(Double))
            .Columns.Add("codServico", GetType(Integer))
            .Columns.Add("codContrato", GetType(Integer))

            .TableName = "Servico"

        End With

        Return dtbServico

    End Function

    Public Function selecionarTipoServico(ByVal bFiltrarInativos As Boolean) As DataTable
        Try
            Return objTipoServico.selecionarTiposServico(bFiltrarInativos)
        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método sqlConsulta." & _
                                Environment.NewLine & ex.Message)

        End Try


    End Function

    Public Function gravarTipoServico(ByVal iCodServico As Int32,
                                      ByVal sDescTipoServico As String,
                                      ByVal iOrigem As Int32,
                                      ByVal bPermiteLancamentoManual As Boolean,
                                      ByVal bPermiteLancamentoFrequente As Boolean,
                                      ByVal bInativo As Boolean) As Boolean
        Dim bRetorno As Boolean = False

        Try
            If Me.validarTipoServico(ctrTipoServico.eTipoValidacao.GRAVACAO,
                                     iCodServico,
                                     sDescTipoServico,
                                     iOrigem) Then

                If iCodServico = 0 Then
                    iCodServico = Me.objTipoServico.inserirTipoServico(sDescTipoServico.Trim,
                                                                       iOrigem,
                                                                       bPermiteLancamentoManual,
                                                                       bPermiteLancamentoFrequente,
                                                                       bInativo)

                Else
                    Me.objTipoServico.editarTipoServico(iCodServico,
                                                        sDescTipoServico.Trim,
                                                        iOrigem,
                                                        bPermiteLancamentoManual,
                                                        bPermiteLancamentoFrequente,
                                                        bInativo)
                End If

                Me.CodTipoServico = iCodServico

                bRetorno = True

            End If

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método gravarTipoServico." & _
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Private Function validarTipoServico(ByVal tipoValidacao As eTipoValidacao,
                                        ByVal iCodTipoServico As Int32,
                                        ByVal sDescricao As String,
                                        ByVal iOrigem As Int32) As Boolean
        Dim bRetorno As Boolean = True

        Try
            Select Case tipoValidacao

                Case eTipoValidacao.GRAVACAO

                    If sDescricao = String.Empty Then
                        MyBase.adicionarMensagensValidacao(eMensagens.DESCRICAO_OBRIGATORIA,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.DESCRICAO_OBRIGATORIA))

                        bRetorno = False
                    Else
                        If Not Me.objTipoServico.verificarTipoServicoCadastrado(iCodTipoServico, sDescricao) Then
                            MyBase.adicionarMensagensValidacao(eMensagens.JA_CADASTRADO,
                                                               ctrTipoEndereco.eTipoLog.ERRO,
                                                               Me.Mensagens(eMensagens.JA_CADASTRADO))

                            bRetorno = False
                        End If
                    End If

                    If iOrigem < 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.ORIGEM_OBRIGATORIA,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.ORIGEM_OBRIGATORIA))

                        bRetorno = False
                    End If

                Case eTipoValidacao.EXCLUSAO

            End Select

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método validarTipoServico." & _
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Public Function selecionarDadosTipoServico(ByVal iCodServico As Int32) As DataRow

        Try

            Return Me.objTipoServico.selecionarDadosTiposServico(iCodServico)

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método selecionarDadosTipoServico." & _
                                Environment.NewLine & ex.Message)

        End Try

    End Function

    Public Function excluirTipoServico(ByVal iCodTipoServico As Int32) As Boolean
        Dim bRetorno As Boolean = False

        Try

            If Me.validarTipoServico(eTipoValidacao.EXCLUSAO, iCodTipoServico, "", 0) Then
                Me.objTipoServico.excluirTipoServico(iCodTipoServico)
                bRetorno = True
            End If

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método excluirTipoServico." & _
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Public Function retornaPermiteLancamentoFrequente(ByVal iCodTipoServico As Int32) As Boolean
        Try

            Return Me.objTipoServico.retornaPermiteLancamentoFrequente(iCodTipoServico)

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método retornaPermiteLancamentoFrequente." & _
                                Environment.NewLine & ex.Message)

        End Try
    End Function

#End Region
End Class
